import search
import fmt.comments


def postprocess(answer, keyword, options, request_options=None):
    answer = _answer_add_comments(answer, request_options=request_options)
    answer = _answer_filter_by_keyword(
        answer, keyword, options, request_options=request_options
    )
    return answer


def _answer_add_comments(answer, request_options=None):

    if answer["format"] != "text+code":
        return answer

    topic = answer["topic"]
    if "filetype" in answer:
        filetype = answer["filetype"]
    else:
        filetype = "bash"
        if "/" in topic:
            filetype = topic.split("/", 1)[0]
            if filetype.startswith("q:"):
                filetype = filetype[2:]

    answer["answer"] = fmt.comments.beautify(
        answer["answer"], filetype, request_options
    )
    answer["format"] = "code"
    answer["filetype"] = filetype
    return answer


def _answer_filter_by_keyword(answer, keyword, options, request_options=None):
    answer["answer"] = _filter_by_keyword(answer["answer"], keyword, options)
    return answer


def _filter_by_keyword(answer, keyword, options):

    def _join_paragraphs(paragraphs):
        answer = "\n".join(paragraphs)
        return answer

    def _split_paragraphs(text):
        answer = []
        paragraph = ""
        if isinstance(text, bytes):
            text = text.decode("utf-8")
        for line in text.splitlines():
            if line == "":
                answer.append(paragraph)
                paragraph = ""
            else:
                paragraph += line + "\n"
        answer.append(paragraph)
        return answer

    paragraphs = [
        p
        for p in _split_paragraphs(answer)
        if search.match(p, keyword, options=options)
    ]
    if not paragraphs:
        return ""

    return _join_paragraphs(paragraphs)
